﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ThoughtWorks.homework
{
    /// <summary>
    /// 火星漫游
    /// </summary>
    public struct MarsRover
    {
        /// <summary>
        /// 机器人当前X坐标
        /// </summary>
        public int x;
        /// <summary>
        /// 机器人当前Y坐标
        /// </summary>
        public int y;
        /// <summary>
        /// 机器人正面朝向
        /// </summary>
        public char head;

        /// <summary>
        /// 重写ToString()
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return x.ToString() + " " + y.ToString() + " " + head.ToString();
        }
    };

    public class ThoughtWorksMarsRover
    {
        /// <summary> 
        /// 火星上的最大X坐标
        /// </summary>
        public static int X { get; set; }

        /// <summary>
        /// 火星上的最大Y坐标
        /// </summary>
        public static int Y { get; set; }

        /// <summary>
        /// 根据指令(向左/右)改变机器人的朝向
        /// </summary>
        /// <param name="instructions">指令,L/R</param>
        /// <param name="currentHead">机器人当前Head方向</param>
        /// <returns>返回改编后的Head方向</returns>
        public static char ChangeHead(char instruction, char currentHead)
        {
            //向右转90度
            char tempHead = '\0';
            if (instruction == 'R')
            {
                switch (currentHead)
                {
                    case 'E':
                        tempHead = 'S';
                        break;
                    case 'N':
                        tempHead = 'E';
                        break;
                    case 'W':
                        tempHead = 'N';
                        break;
                    case 'S':
                        tempHead = 'W';
                        break;
                    default:
                        break;
                }
            }
            //向左转90度
            else if (instruction == 'L')
            {
                switch (currentHead)
                {
                    case 'E':
                        tempHead = 'N';
                        break;
                    case 'N':
                        tempHead = 'W';
                        break;
                    case 'W':
                        tempHead = 'S';
                        break;
                    case 'S':
                        tempHead = 'E';
                        break;
                    default:
                        break;
                }
            }
            return tempHead;
        }

        /// <summary>
        /// 检测机器人是否处于“极限”坐标状态,返回true表示处于非极限位置，还可以继续Move
        /// </summary>
        /// <param name="marsrover">机器人实例对象以及他的坐标</param>
        /// <returns>返回true表示可以继续移动</returns>
        public static bool CanMoveNext(MarsRover marsrover)
        {
            //bool bTemp = true;
            //switch (marsrover.head)
            //{
            //    case 'E':
            //        //机器人面向S，位于矩形右边界
            //        if (marsrover.x == X && (marsrover.y >= 0 && marsrover.y <= Y)) bTemp = false;
            //        break;
            //    case 'S':
            //        //机器人面向S，位于矩形下边界
            //        if (marsrover.y == 0 && (marsrover.x >= 0 && marsrover.x <= X)) bTemp = false;
            //        break;
            //    case 'W':
            //        //机器人面向W，位于矩形左边界(Y轴)
            //        if (marsrover.x == 0 && (marsrover.y >= 0 && marsrover.y <= Y)) bTemp = false;
            //        break;
            //    case 'N':
            //        //机器人面向N，位于矩形上边界(X轴)
            //        if (marsrover.y == Y && (marsrover.x >= 0 && marsrover.x <= X)) bTemp = false;
            //        break;
            //    default:
            //        break;
            //}
            //return bTemp;
            if (marsrover.x++ > X || marsrover.x-- < 0 | marsrover.y++ > Y || marsrover.y-- < 0)
            {
                return false;
            }
            return true;
        }


        /// <summary>
        /// 检测当前坐标是否越界，返回true表示已经越界
        /// </summary>
        /// <param name="marsrover">机器人实例对象</param>
        /// <returns>返回true表示已经越界</returns>
        public static bool IsOutRangeMars(MarsRover marsrover)
        {
            if (marsrover.x < 0 || marsrover.y < 0 || marsrover.x > X || marsrover.y > Y)
            {
                return true;
            }
            return false;
        }


        /// <summary>
        /// 获取机器人Move之后的坐标
        /// </summary>
        /// <param name="marsrover"></param>
        /// <returns></returns>
        public static MarsRover GetNewLocation(MarsRover marsrover, char currentHead)
        {
            MarsRover marsTemp = marsrover;
            switch (currentHead)
            {
                case 'E':
                    marsTemp.x++;
                    break;
                case 'S':
                    marsTemp.y--;
                    break;
                case 'W':
                    marsTemp.x--;
                    break;
                case 'N':
                    marsTemp.y++;
                    break;
                default:
                    break;
            }
            return marsTemp;
        }

        public static void Main(string[] args)
        {
            //接受火星最大坐标
            int marsX = 0, marsY = 0;
            string[] strTempXY = Console.ReadLine().Trim().ToUpper().Split(new char[] { ' ' });
            if (!Int32.TryParse(strTempXY[0], out marsX) && !Int32.TryParse(strTempXY[1], out marsY))
            {
                return;
            }
            marsX = Int32.Parse(strTempXY[0].Trim());
            marsY = Int32.Parse(strTempXY[1].Trim());

            while (true)
            {
                //接受机器人当前位置、Head方向
                string[] strTemp = Console.ReadLine().Trim().ToUpper().Split(new char[] { ' ' });
                int xTemp = 0, yTemp = 0;
                if (!Int32.TryParse(strTemp[0], out xTemp) && !Int32.TryParse(strTemp[1], out yTemp))
                {
                    //throw new FormatException("输入数据格式不正确");
                    return;
                }
                MarsRover marsRover = new MarsRover();
                marsRover.x = Int32.Parse(strTemp[0].Trim());
                marsRover.y = Int32.Parse(strTemp[1].Trim());
                if (strTemp[2][0] == '\0')
                {
                    //throw new FormatException("输入数据格式不正确");
                    return;
                }
                if (strTemp[2][0] != 'E' && strTemp[2][0] != 'W' && strTemp[2][0] != 'S' && strTemp[2][0] != 'N')
                {
                    //throw new FormatException("输入数据格式不正确");
                    return;
                }
                marsRover.head = strTemp[2][0];
                //接受指令字符串
                string Instructions = Console.ReadLine().Trim().ToUpper();

                //标记是否越界
                bool flags = false;
                for (int i = 0; i < Instructions.Length && !flags; i++)
                {
                    if (Instructions[i] == 'R' || Instructions[i] == 'L')
                    {
                        marsRover.head = ChangeHead(Instructions[i], marsRover.head);
                        continue;
                    }
                    else if (Instructions[i] == 'M')
                    {
                        //判断当前是否位于极限坐标，如恰好位于极限坐标，此时应该退出;否则继续移动
                        MarsRover marsNew = GetNewLocation(marsRover, marsRover.head);
                        if (IsOutRangeMars(marsNew) == false && IsOutRangeMars(marsRover) == false)
                        {
                            marsRover = GetNewLocation(marsRover, marsRover.head);
                            continue;
                        }
                        else if (CanMoveNext(marsRover) == false)
                        {
                            marsRover = GetNewLocation(marsRover, marsRover.head);
                            continue;
                        }
                        else
                        {
                            flags = true;
                            break;
                        }
                    }
                }
                //输出最终的坐标位置和Head方向
                Console.WriteLine(marsRover.ToString());
            }


        }
    }
}
